#ifndef _Listp_H_
#define _Listp_H_

template<class T>class UList;
template<class T>class ListNode;

template <class T>
class ListNode{
	private:
		T Item;
		ListNode<T> *Next;

	public:
		friend UList<T>;
		ListNode();
		ListNode(const ListNode<T> &pt);
		~ListNode();
};

template <class T>
class UList{
	private:
		ListNode<T> *head;

	public:
		friend ListNode<T>;
		UList();
		UList(const UList<T> &);
		~UList();
		bool insert(const int pos, const T);
		bool push_back(const T);
		bool remove(const int);
		bool empty();
		bool clear();
		int size();
		T& operator[](const int);
};

#include "listp.cpp"

#endif
